package Day_0219.Redis;

/**
 * @author zxc
 * @date 2023/02/19 14:39
 **/
public class HowToUseCache {
    public static void main(String[] args) {
        /**
         * 平常项目中，是如何取使用缓存的，同时请简述一下缓存所带来的优势和好处;
         * ===>
         * 1.缓存，主要有两个用途：高性能、高并发。
         *
         * 2.高性能
         * （1）假设这么个场景，你有个操作，一个请求过来，吭哧吭哧你各种乱七八糟操作 mysql，半天查出来一个结果，耗时 600ms。
         *  但是这个结果可能接下来几个小时都不会变了，或者变了也可以不用立即反馈给用户。那么此时咋办？
         * ===》
         *  缓存啊，折腾 600ms 查出来的结果，扔缓存里，一个 key 对应一个 value，
         *  下次再有人查，别走 mysql折腾 600ms 了，直接从缓存里，通过一个 key 查出来一个 value，2ms 搞定。
         *  性能提升 300 倍。
         * （2）就是说对于一些需要复杂操作耗时查出来的结果，且确定后面不怎么变化，
         *  但是有很多读请求，那么直接将查询出来的结果放在缓存中，后面直接读缓存就好。
         * （3）从缓存中读取数据的速度，远远大于从磁盘中读取数据的速度;
         * （即，内存的运算速度远远大于磁盘的运算速度;）
         * ===>即，将某些长时间不会发生变化的数据 ，从数据库存储到缓存中，以提高查询效率，提高用户体验。
         *
         * 3.高并发
         * （1）所以要是你有个系统，高峰期一秒钟过来的请求有 1 万，那一个 mysql 单机绝对会死掉。
         *  你这个时候就只能上缓存，把很多数据放缓存，别放 mysql。
         *  缓存功能简单，说白了就是 key-value 式操作，单机支撑的并发量轻松一秒几万十几万，支撑高并发 so easy。
         *  单机承载并发量是 mysql 单机的几十倍。
         * （2）缓存是走内存的，内存天然就支撑高并发。
         * （即，内存的运算速度很快，远远大于磁盘的运算速度;）
         *
         * 4.常见的缓存问题有以下几个：
         * （1）缓存与数据库，读写不一致
         * （2）缓存雪崩
         * （3）缓存穿透
         * （4）缓存并发竞争
         * （5）缓存击穿
         * 等等....
         *
         */
    }
}
